home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / cluster.arc / FFWD.C < prev    next >
Text File  |  1989-05-11  |  2KB  |  76 lines

  1. /*
  2.  *      file I/O version of forward ref handler
  3.  */
  4.  
  5. #define    FILEMODE    0644    /* file creat mode */
  6. #define    UPDATE        2    /* file open mode */
  7. #define    ABS        0    /* absolute seek */
  8.  
  9. int    Forward =0;        /* temp file's file descriptor    */
  10. char    Fwd_name[] = { "Fwd_refs" } ;
  11.  
  12. /*
  13.  *      fwdinit --- initialize forward ref file
  14.  */
  15. fwdinit()
  16. {
  17.     Forward = creat(Fwd_name,FILEMODE);
  18.     if(Forward <0)
  19.         fatal("Can't create temp file");
  20.     close(Forward); /* close and reopen for reads and writes */
  21.     Forward = open(Fwd_name,UPDATE);
  22.     if(Forward <0)
  23.         fatal("Forward ref file has gone.");
  24. #ifndef DEBUG
  25.   close(Forward); /* Have to close first on MS-DOS or you leave lost clusters. */
  26.     unlink(Fwd_name);
  27. #endif
  28. }
  29.  
  30. /*
  31.  *      fwdreinit --- reinitialize forward ref file
  32.  */
  33. fwdreinit()
  34. {
  35.     F_ref   = 0;
  36.     Ffn     = 0;
  37.     lseek(Forward,0L,ABS);   /* rewind forward refs */
  38.     read(Forward,&Ffn,sizeof(Ffn));
  39.     read(Forward,&F_ref,sizeof(F_ref)); /* read first forward ref into mem */
  40. #ifdef DEBUG
  41.     printf("First fwd ref: %d,%d\n",Ffn,F_ref);
  42. #endif
  43. }
  44.  
  45. /*
  46.  *      fwdmark --- mark current file/line as containing a forward ref
  47.  */
  48. fwdmark()
  49. {
  50.     write(Forward,&Cfn,sizeof(Cfn));
  51.     write(Forward,&Line_num,sizeof(Line_num));
  52. }
  53.  
  54. /*
  55.  *      fwdnext --- get next forward ref
  56.  */
  57. fwdnext()
  58. {
  59.     int stat;
  60.  
  61.     stat = read(Forward,&Ffn,sizeof(Ffn));
  62. #ifdef DEBUG
  63.     printf("Ffn stat=%d ",stat);
  64. #endif
  65.     stat = read(Forward,&F_ref,sizeof(F_ref));
  66. #ifdef DEBUG
  67.     printf("F_ref stat=%d  ",stat);
  68. #endif
  69.     if( stat < 2 ){
  70.         F_ref=0;Ffn=0;
  71.         }
  72. #ifdef DEBUG
  73.     printf("Next Fwd ref: %d,%d\n",Ffn,F_ref);
  74. #endif
  75. }
  76.